package cn.com.surker.material.service;

import cn.com.surker.system.entity.DataSourceInfo;

import java.util.List;
import java.util.Map;

/**
 * @Author lucky
 * @create 2021年06月02 10:12
 * @desc 采购合同
 */
public interface IMaterialContractService {

    /**
     * 查询采购合同分页查询
     * @param ds 数据源
     * @param name 合同名称
     * @param offset
     * @param limit
     * @return
     */
	Map<String, Object> queryContractByPage(DataSourceInfo ds, String name,
											Integer offset, Integer limit);

    /**
     * 查询采购合同明细
     * @param ds 数据源
     * @param cid 合同编号
     * @return
     */
	List<Map<String, Object>> queryContractDetail(DataSourceInfo ds, Integer cid);

    /**
     * 查询供货商信息
     * @return
     */
	List<Map<String, Object>> loadSupplier(DataSourceInfo ds);

	/**
	 * 根据供应商ID查询原材信息
	 * @param ds
	 * @param supplierId
	 * @return
	 */
	List<Map<String, Object>> loadMaterialBySupplier(DataSourceInfo ds, Integer supplierId);

    /**
     * 签订采购合同
     * @param ds 数据源
     * @param sid 供应商ID
     * @param mid 原材ID
     * @param price 单价
     * @param freight 运费
     * @param signDate 签订日期
     * @param effectiveDate 生效时间
     * @param creatorId 创建人ID
     * @param type 1:原材,2:辅材
     * @param property 1:正式合同,2:临时合同
     * @param status 1:暂时2:启用
     * @param isReview 1:已审核 2:未审核
     * @param remark 备注
     * @return
     */
	Integer saveContract(DataSourceInfo ds, Integer sid, Integer mid, Double price, Double freight, String signDate,
							   String effectiveDate, Long creatorId, String remark, Integer isReview, Integer property,
							   Integer status, Integer type);

    /**
     * 查询原材信息
     * @param ds
     * @param level
     * @return
     */
	Map<String, Object> loadMaterial(DataSourceInfo ds, Integer level,
							   Integer offset, Integer limit);

    /**
     * 保存原材信息
     * @param ds
     * @param level 材料级别
     * @param mid 父级原材ID
     * @param name 材料名称
     * @param type 0:添加,1:修改
     * @return
     */
    Integer saveMaterial(DataSourceInfo ds, Integer level, Integer mid, String name, Integer type);
}
